//
//  ViewController.swift
//  guard let
//
//  Created by Summer on 2017/11/15.
//  Copyright © 2017年 Summer. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    weak var delegate:DelegataName?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
//        online(age: 18)
//
//        demo3()
//
//        demo4(name: "老王，有年龄", age: 18)
//
//        let p = Person(dict: ["name":"小王" as AnyObject])
//        print(p.name)
        
        
        
        
    }
    
    func clickButton() {
        delegate?.method()
    }

    // MARK: - guard的使用
    var age = 18
    func online(age : Int) -> Void {
        // guard 和if let刚好相反
        // guard语句必须带有else语句当条件表达式为true时候跳过else语句中的内容，执行语句组内容;
        // 条件表达式为false时候执行else语句中的内容，跳转语句一般是return、break、continue和throw
        guard age >= 18 else {
            print("回家去")
            return
        }
        
        print("可以上网")
    }

    // MARK: - guard let的使用
    // 守护有值,和if let相反 ,逻辑代码少降低分支的层次
    func demo3() {
        
        let userName: String? = "思思"
        let age: Int? = 20
        guard let name = userName,let oage = age else {
            
            print("name或者是age为nil")
            return
        }
        
        //代码执行至此，表示name 和oage一定有值
        print(name + String(oage))
        
    }

    // MARK: - guard let和if let的使用技巧
    func demo4(name: String?,age: Int?) {
        
        if let name = name,let age = age {
            // 非空的name和age仅在{}内部有效
            print(name + String(age))
            print("----------")
        }
        
        // 使用同名的变量来接收值，在后续使用的都是非空值，不需要解包
        // 好处，可以避免起名字的烦恼
        guard let name = name,let age = age else { return print("name or age is nil") }
        print(name + String(age))
    }
    
}

